package comunicação.em.rede;
import java.io.*;                                                   //Pacote de entrada e saída
import java.net.*;                                                  //Pacote para sockets e threads

class Cliente extends Thread {                                      //Classe destinada a fazer o envio das mensagens, extende a classe thread para a execução
    byte[] Mensagem;                                                //Mensagem - Mensagem que será enviada
    Conexão Caminho;                                                //Caminho - Contém dados vitais para o envio do pacote
    
    public Cliente(String MensagemR, Conexão CaminhoR) {            //Montador que recolhe os dados necessários para enviar uma mensagem
        this.Mensagem = MensagemR.getBytes();                       //Seta a mensagem em bytes (necessário para criar o pacote)
        this.Caminho = CaminhoR;                                    //Seta o caminho
    }

    @Override                                                                                                               //Implementa método abstrato                                                                                            
    public void run() {                                                                                                     //Método que dispara o envio de mensagens (um pacote por um socket)
        InetAddress Endereco;                                                                                               //Endereçamento por IP
        try {                                                                                                               //Executar o corpo de código (erros tratados no catch)
            Endereco = InetAddress.getByName(Caminho.devolveIP());                                                          //Conversão da string IP em um endereço
            DatagramSocket SocketEnvio = new DatagramSocket();                                                              //Cria socket para envio
            DatagramPacket PacoteEnvio = new DatagramPacket(Mensagem, Mensagem.length, Endereco, Caminho.devolvePorta());   //Cria pacote com as informações para envio
            SocketEnvio.send(PacoteEnvio);                                                                                  //Manda o pacote pelo socket criado
            SocketEnvio.close();                                                                                            //Fecha o socket usado para o envio
        } catch (UnknownHostException | SocketException ex) {                                                               //Excessão para caminho inválido ou erro de criação de socket
            System.out.println("Host idefinido ou problemas de socket!!");                                                  //Tratamento do erro (fornecido pela IDE)
        } catch (IOException ex) {                                                                                          //Excessão para erro de envio
            System.out.println("Problemas de IO!!");                                                                        //Tratamento de erro (fornecido pela IDE)
        }   
    }
    
}
